package com.sanxia.common.utils;

import java.security.MessageDigest;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;

public final class SHA1 {
		 
	    private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5',
	                           '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
	 
	    /**
	     * Takes the raw bytes from the digest and formats them correct.
	     *
	     * @param bytes the raw bytes from the digest.
	     * @return the formatted bytes.
	     */
	    private static String getFormattedText(byte[] bytes) {
	        int len = bytes.length;
	        StringBuilder buf = new StringBuilder(len * 2);
	        // 把密文转换成十六进制的字符串形式
	        for (int j = 0; j < len; j++) {
	            buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
	            buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
	        }
	        return buf.toString();
	    }
	 
	    public static String encode(String str) {
	        if (str == null) {
	            return null;
	        }
	        try {
	            MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
	            messageDigest.update(str.getBytes());
	            return getFormattedText(messageDigest.digest());
	        } catch (Exception e) {
	            throw new RuntimeException(e);
	        }
	    }

	    public static String createSignBalance(SortedMap<String,Object> parameters){  
			StringBuffer sb = new StringBuffer();  
			Set es = parameters.entrySet();//所有参与传参的参数按照accsii排序（升序）  
			Iterator it = es.iterator();  
			while(it.hasNext()) {  
				Map.Entry entry = (Map.Entry)it.next();  
				String k = (String)entry.getKey();  
				Object v = entry.getValue();  
				if(null != v && !"".equals(v)   
						&& !"sign".equals(k) && !"key".equals(k)) {  
					sb.append(k + "=" + v + "&");  
				}  
			}  
			String sign =SHA1.encode((sb.toString().substring(0,sb.toString().length()-1)));
			return sign;  
		}  

}
